# asterisk-phonecos.pm
# Copyright (C) 2006  Stephane Alnet
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
# 

# This file is part of the CarrierClass.net project.
# For more information: http://carrierclass.net/
#
package CCNv2::Provision::Asterisk::phonecos;
use strict;
use warnings;
use base qw(CCNCore::Provision::Base);
use CCN::Text;
use CCNCore::Scripting;

sub run()
{
    my $self = shift;
    return unless defined $self->p->{cp_member};

    # Here we travel through all the lines in order to enumerate
    # the phone numbers (extensions).
    # YYY Only process the pools for which we are a cp_cluster.
    #     ... not necessarily. This is actually pretty ugly.

    my %header;
    my %conf;

    $self->sql_do_for( <<'SQL', $self->p->{cp_member},
        SELECT extensions_route.enterprise, extensions_route.pk, extension."number" 
        FROM extensions_route_extension, extensions_route, extension
        WHERE extensions_route.pk = extensions_route_extension.extensions_route
        AND extensions_route_extension.extension = extension.pk
        AND extensions_route.enterprise IN (SELECT DISTINCT enterprise FROM pool WHERE cp_cluster = ?)
SQL
    sub
    {
        my $ENTERPRISE = shift;
        my $PHONEROUTE = shift;
        my $NUMBER = shift;             

        $header{$PHONEROUTE} = "[${ENTERPRISE}-phones-${PHONEROUTE}]\n;";
        $conf{$PHONEROUTE}  .= "exten => $NUMBER,1,Goto(${ENTERPRISE}-phones,$NUMBER,1)\n";
    });

    foreach ("/etc/asterisk/config/extensions.phonecos.conf")
    {
        my $conf = join '', map { $header{$_}.$conf{$_} } (keys %conf);
        CAT $_, $conf;
        IF_CHANGED $_ => CCNv2::Scripting::AST('extensions reload');
    }
}

1;
